﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DotLink;
using DotBusiness.Models;
using DotLink.Atendimento;

namespace JAVALI_Cardapio_Atendimento.Atendimento
{
    public partial class FrmPedidos : Form
    {
        #region Propriedades
        public Form Before { get; set; }
        #endregion

        #region Construtor
        public FrmPedidos()
        {
            InitializeComponent();
        }
        #endregion

        #region Métodos

        /// <summary>
        /// No clique do botão voltar, retorna para o Menu de Atendimento e fecha o Formulário de Pedidos 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnVoltarMenuAtendimento_Click(object sender, EventArgs e)
        {
            this.Before.Show();
            this.Hide();
        }

        /// <summary>
        /// Carregamento inicial do formulário de Pedidos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmPesquisarPedidos_Load(object sender, EventArgs e)
        {
            //Carrega no DataGridView de pedidos delivery, os pedidos delivery que estão em espera
            dtPedidosDeliveryEmEspera.DataSource = (MDelivery[])Bag.L_Delivery_Array();
            dtPedidosLocaisEmEspera.DataSource = (MLocal[])Bag.L_Locais_Array();

            HasDelivery();
            HasLocal();
        }

        /// <summary>
        /// No clique do link de Voltar, retorna para o Menu de Atendimento, e o formulário de Pedidos é fechado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkVoltarMenuAtendimento_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.Before.Show();
            this.Hide();
        }

        private int RemoveIndex(dynamic source)
        {
            var row = source.SelectedCells[0].RowIndex;

            var index = 0;
            if (row > 0)
            {
                index = row;
            }
            return index;
        }   

        /// <summary>
        /// No evento de clique do botão, exclui um pedido do tipo delivery
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExcluirPedidoDelivery_Click(object sender, EventArgs e)
        {
            try
            {
                var index = RemoveIndex(dtPedidosDeliveryEmEspera);
                Bag.L_Delivery.Remove(index);
                dtPedidosDeliveryEmEspera.DataSource = Bag.L_Delivery_Array();
                MessageBox.Show("Não quero mais essa gororoba!", "Pedido Cancelado");
            }
            catch
            {
                MessageBox.Show("Selecione um pedido para excluir!");
            }
        }

        private void dtPedidosDeliveryEmEspera_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            var rowIndex = dtPedidosDeliveryEmEspera.SelectedCells[0].RowIndex;
            var idPedido = dtPedidosDeliveryEmEspera.Rows[rowIndex].Cells[0].Value;
            var detalhes = new FrmDetalhesPedidos();
            detalhes.Pedido(Int32.Parse(idPedido.ToString()), true);
            detalhes.Before = this;
            detalhes.Show();
        }

        private void btnExcluirPedidoLocal_Click(object sender, EventArgs e)
        {
            try
            {
                var index = RemoveIndex(dtPedidosLocaisEmEspera);
                Bag.L_Locais.Remove(index);
                dtPedidosLocaisEmEspera.DataSource = Bag.L_Locais_Array();
                MessageBox.Show("Não quero mais essa gororoba!", "Pedido Cancelado");
            }
            catch
            {
                MessageBox.Show("Selecione um pedido para excluir!");
            }
        }

        private void btnFecharPedidoLocal_Click(object sender, EventArgs e)
        {
            try
            {
                var index = RemoveIndex(dtPedidosLocaisEmEspera);
                Bag.L_Locais.Remove(index);
                dtPedidosLocaisEmEspera.DataSource = Bag.L_Locais_Array();
                MessageBox.Show("Bom apetite! O JAVALI agradece!", "Javali - Pedido entregue");
            }
            catch
            {
                MessageBox.Show("Selecione um pedido para fechar!");
            }
        }

        private void btnFecharPedidoDelivery_Click(object sender, EventArgs e)
        {
            try
            {
                var index = RemoveIndex(dtPedidosDeliveryEmEspera);
                 Bag.L_Delivery.Remove(index);
                dtPedidosDeliveryEmEspera.DataSource = Bag.L_Delivery_Array();
                MessageBox.Show("As entregas do JAVALI vão a galope!!");    
            }
            catch
            {
                MessageBox.Show("Selecione um pedido para fechar!");
            }
        }

        private void dtPedidosLocaisEmEspera_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            var rowIndex = dtPedidosLocaisEmEspera.SelectedCells[0].RowIndex;
            var idPedido = dtPedidosLocaisEmEspera.Rows[rowIndex].Cells[0].Value;
            var detalhes = new FrmDetalhesPedidos();
            detalhes.Pedido(Int32.Parse(idPedido.ToString()), false);
            detalhes.Before = this;
            detalhes.Show();
        }

        private void HasDelivery()
        {
            if (dtPedidosDeliveryEmEspera.RowCount < 1)
            {
                btnExcluirPedidoDelivery.Visible = false;
                btnFecharPedidoDelivery.Visible = false;
            }
            else
            {
                btnExcluirPedidoDelivery.Visible = true;
                btnFecharPedidoDelivery.Visible = true;
            }
        }
        private void HasLocal()
        {
            if (dtPedidosLocaisEmEspera.RowCount < 1)
            {
                btnExcluirPedidoLocal.Visible = false;
                btnFecharPedidoLocal.Visible = false;
            }
            else
            {
                btnExcluirPedidoLocal.Visible = true;
                btnFecharPedidoLocal.Visible = true;
            }

        }

        private void dtPedidosDeliveryEmEspera_DataSourceChanged(object sender, EventArgs e)
        {
            HasDelivery();
        }

        private void dtPedidosLocaisEmEspera_DataSourceChanged(object sender, EventArgs e)
        {
            HasLocal();
        }
        #endregion
    }
}
